package com.autumn.config.api.services;

import com.autumn.config.api.dto.output.ConnectionConfigureOutput;
import com.autumn.config.api.vo.*;
import com.autumn.util.function.FunctionOneResult;
import com.autumn.util.function.FunctionTwoResult;

import java.util.List;

/**
 * 缓存服务
 * 
 * @author 老码农
 *
 *         2018-01-04 16:12:05
 */
public interface ICacheService {

	/**
	 * 获取服务连接列表
	 * 
	 * @param serviceId
	 *            服务id
	 * @return
	 *
	 */
	List<ServiceConnectionConfigureValue> getServiceConnectionList(String serviceId);

	/**
	 * 获取服务连接列表
	 * 
	 * @param serviceId
	 *            服务id
	 * @param fun
	 *            函数
	 * @return
	 *
	 */
	List<ServiceConnectionConfigureValue> getServiceConnectionList(String serviceId,
                                                                   FunctionOneResult<String, List<ServiceConnectionConfigureValue>> fun);

	/**
	 * 获取服务连接
	 *
	 * @param serviceId
	 *            服务id
	 * @param identity
	 *            标识
	 * @return
	 *
	 */
	ServiceConnectionConfigureValue getServiceConnection(String serviceId, String identity);

	/**
	 * 获取服务连接
	 *
	 * @param serviceId
	 *            服务id
	 * @param identity
	 *            标识
	 * @param fun
	 *            函数
	 * @return
	 *
	 */
	ServiceConnectionConfigureValue getServiceConnection(String serviceId, String identity,
                                                         FunctionTwoResult<String, String, ServiceConnectionConfigureValue> fun);

	/**
	 * 获取服务配置
	 *
	 * @param input
	 *            输入
	 * @return
	 *
	 */
	ServiceProfileInfo getServiceProfile(ServiceProfileValue input);

	/**
	 * 获取服务配置
	 *
	 * @param input
	 *            输入
	 * @param fun
	 *            函数
	 * @return
	 *
	 */
	ServiceProfileInfo getServiceProfile(ServiceProfileValue input,
                                         FunctionOneResult<ServiceProfileValue, ServiceProfileInfo> fun);

	/**
	 * 基于服务id进行查询
	 *
	 * @param serviceId
	 *            服务id
	 * @return
	 *
	 */
	ApplicationInfoValue getServiceQueryById(String serviceId);

	/**
	 * 基于服务id进行查询
	 *
	 * @param serviceId
	 *            服务id
	 * @param fun
	 *            函数
	 * @return
	 *
	 */
	ApplicationInfoValue getServiceQueryById(String serviceId, FunctionOneResult<String, ApplicationInfoValue> fun);

	/**
	 * 获取服务数据源
	 *
	 * @param input
	 *            输入
	 * @return
	 */
	ServiceDataSourceConfigureValue getServiceTargetDataSource(ServiceDataSourceValue input);

	/**
	 * 获取服务数据源
	 *
	 * @param input
	 *            输入
	 * @param fun
	 *            函数
	 * @return
	 */
	ServiceDataSourceConfigureValue getServiceTargetDataSource(ServiceDataSourceValue input,
                                                               FunctionOneResult<ServiceDataSourceValue, ServiceDataSourceConfigureValue> fun);

	/**
	 * 获取连接信息
	 * 
	 * @param name
	 *            名称
	 * @return
	 *
	 */
	ConnectionConfigureOutput getConnectionInfo(String name);

	/**
	 * 获取连接信息
	 * 
	 * @param name
	 *            名称
	 * @param fun
	 *            函数
	 * @return
	 *
	 */
	ConnectionConfigureOutput getConnectionInfo(String name, FunctionOneResult<String, ConnectionConfigureOutput> fun);

	/**
	 * 删除服务相关信息
	 * 
	 * @param serviceId
	 *            服务id
	 *
	 */
	void deleteServiceInfo(String serviceId);

	/**
	 * 删除服务配置
	 * 
	 * @param serviceId
	 *            服务id
	 *
	 */
	void deleteServiceProfile(String serviceId);

	/**
	 * 删除所有服务信息
	 * 
	 * @param serviceId
	 *
	 */
	void deleteALLServiceInfo();

	/**
	 * 删除连接相关信息
	 * 
	 * @param name
	 *            名称
	 *
	 */
	void deleteConnectionInfo(String name);

	/**
	 * 删除所有连接信息
	 * 
	 * @param serviceId
	 *
	 */
	void deleteALLConnectionInfo();
}
